package dao.jpa;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Query;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import dao.ProdutoDAO;
import entity.GrupoProduto;
import entity.MarcaProduto;
import entity.Produto;

@Repository
public class ProdutoJpaDAO extends GenericJpaDAO<Produto, Long> implements
		ProdutoDAO, Serializable {

	private static final long serialVersionUID = -7769051838144785979L;

	@SuppressWarnings("unchecked")
	@Override
	public List<Produto> buscarProdutosPorGrupo(GrupoProduto grupoProduto) {

		Criteria criteria = criarCriteria();
		criteria.add(Restrictions.eq("grupoProduto", grupoProduto));
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Produto> buscarProdutosPorMarca(MarcaProduto marcaProduto) {

		Criteria criteria = criarCriteria();
		criteria.add(Restrictions.eq("marcaProduto", marcaProduto));
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Produto> buscarProdutosComEstoqueAbaixoLimiteMinino(int qtdaMaximaProduto) {

		Criteria criteria = criarCriteria();
		criteria.add(Restrictions.eq("ativo", true));

		Query query = getEntityManager()
				.createQuery(
						"SELECT p FROM Produto p where p.qtdaAtualEstoque <= p.qtdaMinima and p.ativo = :ativo ");

		query.setParameter("ativo", true);
		query.setMaxResults(qtdaMaximaProduto);

		return (List<Produto>) query.getResultList();
	}
}
